草庐IT

D3 笔记

全部标签

javascript - 在 d3 中拖动后始终抑制单击事件

单击和拖动事件的解耦在之前的一些问题中讨论过,例如thisone通常,建议在点击处理程序中使用if(d3.event.defaultPrevented===false){...}。但是,如果mouseup和mousedown不在同一个元素中,这似乎不起作用(至少在某些浏览器中)。Considerthisjsfiddle(下面的代码)。这是我想要的行为:单击SVG中的任意位置触发单击事件(矩形闪烁),拖动SVG中的任意位置拖动矩形。观察到的行为(Chrome33):如果单击的mousedown在矩形内部,而mouseup在外部,则拖动和单击事件都会触发。如果mousedown和mouse

javascript - D3.json 设置缓存为 false

我注意到使用json调用(d3.json)重绘D3元素不想在IE9+上更新。原因是json调用被缓存,因此浏览器不会在传递新数据时注册。正常jQueryajax调用的解决方法是将其属性设置为缓存:false,全局用于所有ajax调用:$.ajaxSetup({cache:false});但是我如何将它添加到d3.json调用中,因为它使用自己的方法调用ajax?我成功地在路径后添加了当前时间戳:varnoCache=newDate().getTime();d3.json(data+"?_="+noCache)但这样做有点蹩脚……有什么建议可以实现吗?或者更好的是,如何仅在IE运行时设置

javascript - 在 D3 map 上显示工具提示

我使用D3和countriesgeojson创建了一个基本map.这是demo.现在,当用户点击map上的任何坐标时,我会在工具提示中显示天气信息,并以天气图标作为标记。countries=countriesGroup.selectAll("path").data(json.features).enter().append("path").attr("d",path).attr("id",function(d,i){return"country"+d.properties.iso_a3;}).attr("class","country")//addamouseoveractiontos

javascript - D3.js - 以编程方式在 Jasmine 中生成拖动事件

我有一个使用D3和Angular编写的折线图组件。它具有用于更改x轴比例的可拖动条。现在我正在尝试使用Karma/Jasmine测试组件。我在单元测试中无法触发拖动事件。鼠标悬停和单击等其他事件也可以正常触发。我认为这是导致问题的d3中“拖动”事件的综合实现。这是我用来触发拖动的代码(此类代码在测试html页面上触发正确的d3拖动事件,但在单元测试中失败)。varleftBar=element.find(".left-bar")[0];varevObjStart=document.createEvent("MouseEvents");evObjStart.initMouseEvent(

javascript - zoom.scaleExtent() 在 d3.js 中做了什么?

我已经创建了d3时间轴,//minDateandmaxDatesarejavascriptdateobject.vartimeScale=d3.scaleTime().domain([minDate,maxDate]).range([0,width]);vartimeAxis=d3.axisBottom(timeScale);我已经在这个轴上添加了缩放交互//gXisgroupdivthathastimeAxis.gX.call(d3.zoom(timeScale).scaleExtent([0,4]).on("zoom",function(d){//Dosomething.}))但最

javascript - d3js 围绕饼图重新分配标签

我正在使用d3.js创建一个在外面带有标签的圆环图。我使用基于饼图每个切片的质心的三Angular函数来定位标签。g.append("g").attr("class","percentage").append("text").attr("transform",function(d){varc=arc.centroid(d);varx=c[0];vary=c[1];varh=Math.sqrt(x*x+y*y);return"translate("+(x/h*obj.labelRadius)+','+(y/h*obj.labelRadius)+")";}).attr("dy",".4em

javascript - d3.js - 以缩写形式在轴上显示大数字

有没有办法在d3.js轴上缩写大数字?我记得在网上看到一个辅助方法,但找不到了。我想缩写大数字以减少图表边距并使其更易于阅读。即1,000,000=1M等如果有人可以发布指向d3.js帮助器类的链接,我们将不胜感激。 最佳答案 查看此链接https://bl.ocks.org/mbostock/9764126这对我适用于d3v4:functionmake_y_gridlines(){returnd3.axisLeft(yScale).ticks(10,"s")} 关于javascript

javascript - 使用 SVG 和 d3.js 创建滚动条

现在我已经使用d3创建了几个“框”,它们只是带有文本的SVG矩形:varcanvas=d3.select("body").append("svg").attr("width",800).attr("height",500);//specifiesdrawingareaforeachboxvarboxes=canvas.selectAll("rect").data(classData).enter();boxes.append("rect").attr("width",boxWidth).attr("height",boxHeight).attr("fill",boxColor).att

javascript - 使用 Dagre d3 缩放后重新渲染 HTML

编辑我找到了一个涉及使用稍旧版本的dagre-d3库(4.11)的解决方案。如果有人能找到最新版本的问题,那也会有所帮助。谢谢我正在使用Dagred3绘制一些图表。当我最初渲染我的图表时,我会这样做g=newdagreD3.graphlib.Graph().setGraph({}).setDefaultEdgeLabel(function(){return{};});varsvg=d3.select("svg"),inner=svg.select("g");svgGroup=svg.append("g");varrender=newdagreD3.render();render(d3.

javascript - Accessibility: d3 brush/zoom 可以获得焦点并用键盘控制

关于如何使用键盘控制d3笔刷/缩放的任何提示:1.专注笔刷控制能力2.能够使用键盘改变笔刷区域是否支持开箱即用?更新:显然没有开箱即用的解决方案(希望d3会在某个时候提供)。这意味着自定义解决方案将取决于可视化/场景。发布实际的用户体验和要求,并将针对此特定案例提供解决方案。为了满足可访问性要求,任务是修改下面的图表控件,以便能够使用键盘进行缩放/画笔。这包括:1)能够设置焦点;2)能够使用左右箭头键进行控制。 最佳答案 我要用这个bl.ock作为引用。我相信这是您图像的来源。缩放和画笔功能比较我们对这个block中的一些东西感兴趣